#include <iostream>
#include "BloqArch/ArchBloques.h"

#include "BTree/HeaderDatos.h"
#include "BTree/NodoDatos.h"
#include "BTree/NodoIndice.h"

#include "BTree/RegistroDatos.h"
#include "BTree/RegistroIndice.h"

#include "BTree/BTree.h"


using namespace std;



int main(int argc, char* argv[]){

	try{
		cout << "Prueba v20" << endl;

		cout << "Se crea un árbol B++ en disco, mediante inserción!" << endl;
		BTree tree("ArbolBpp.bin", true);

		cout << "Primero solo la raiz:" << endl;
		tree.insertarRegistro(new RegistroDatos(1, "uno"));
		tree.insertarRegistro(new RegistroDatos(7, "siete"));
		tree.insertarRegistro(new RegistroDatos(4, "cuatro"));
		tree.insertarRegistro(new RegistroDatos(9, "nueve"));

		cout << "Esta inserción deberia producir un overflow" << endl;
		tree.insertarRegistro(new RegistroDatos(3, "tres"));
/*
		tree.insertarRegistro(new RegistroDatos(8, "ocho"));
		tree.insertarRegistro(new RegistroDatos(10, "diez"));

		cout << "Segundo overflow y mas alla!" << endl;
		tree.insertarRegistro(new RegistroDatos(15, "quince"));
		tree.insertarRegistro(new RegistroDatos(50, "cincuenta"));
		tree.insertarRegistro(new RegistroDatos(25, "veinticinco"));
		tree.insertarRegistro(new RegistroDatos(18, "dieciocho"));
		tree.insertarRegistro(new RegistroDatos(35, "treintacinco"));
		tree.insertarRegistro(new RegistroDatos(20, "veinte"));
		tree.insertarRegistro(new RegistroDatos(5, "cinco"));
		tree.insertarRegistro(new RegistroDatos(55, "cincocinco"));
		tree.insertarRegistro(new RegistroDatos(30, "treinta"));
		tree.insertarRegistro(new RegistroDatos(49, "cuarentanueve"));
		tree.insertarRegistro(new RegistroDatos(29, "veintinueve"));
*/
		//-------------------------------

		cout << "\nSe busca uno de los registros en el árbol B++" << endl;

		int key = 35;
		RegistroDatos reg = tree.buscarRegistro(key);

		cout << "Compara el registro recuperado con los datos que guardamos:" << endl;
		cout << "Clave buscada: " << key << "\n"
				<< "Encontrada: " << reg.getClave()
				<< " -> " << reg.getDato() << endl;

		cout << "Fin." << endl;
		return 0;

	} catch (char const* c){
		cout << "Excepcion: " << c << endl;
		return 1;
	}
}

